#ifndef _DevicesPID_H_
#define _DevicesPID_H_


#define PID_P               80
#define PID_I               1
#define PID_D               0

/* 允许最大误差值 */
#define PID_EMAX            15

/* 积分的上、下限 */
#define PID_IMAX            PID_OMAX
#define PID_IMIN            PID_OMIN

/* 输出的上、下限 */
#define PID_OMAX            1000
#define PID_OMIN            0


typedef struct{
    int32_t kp, ki, kd;     /* 比例、积分、微分系数 */
    int32_t integral;       /* 积分值 */
    int32_t errLast;        /* 上一个偏差值 */

    int32_t errMax;         /* 允许最大误差值 */
    int32_t integralMax;    /* 积分的上限 */
    int32_t integralMin;    /* 积分的下限 */

    int32_t out;            /* 输出值 */
    int32_t outMax;         /* 输出的上限 */
    int32_t outMin;         /* 输出的下限 */
}PIDType;


void vPIDDeInit(PIDType *ptypePID, int32_t kp, int32_t ki, int32_t kd, int32_t errMax, int32_t integralMax, int32_t integralMin, int32_t outMax, int32_t outMin);
int32_t iPIDLocation(PIDType *ptypePID, int32_t set, int32_t now);


#endif
